export const shortId = (length = 8) =>
  Math.random()
    .toString(36)
    .substring(2, length + 2);

/**
 * 封装一个纯JS的相对时间计算函数
 * @param {Date | string | number} dateInput - 目标时间 (Date对象、时间戳或日期字符串)
 * @returns {string} 相对时间描述 (例如: "刚刚", "5分钟前", "3天后")
 */
export function getRelativeTime(dateInput: Date | string | number): string {
  const targetTime = new Date(dateInput).getTime();
  const now = Date.now();

  // 计算毫秒差
  const diffInMs = targetTime - now;
  // 转换成秒，并取绝对值
  const diffInSeconds = Math.abs(diffInMs) / 1000;
  // 定义时间单位的秒数
  const MINUTE = 60;
  const HOUR = 3600; // 60 * 60
  const DAY = 86400; // 3600 * 24
  const MONTH = 2592000; // 86400 * 30 (按30天估算)
  const YEAR = 31536000; // 86400 * 365 (按365天估算)

  let value: number, unit: string;

  // 根据秒数选择最合适的时间单位
  if (diffInSeconds < MINUTE) {
    // 少于 1 分钟
    // 根据是过去还是未来，返回 "刚刚" 或 "马上"
    return diffInMs < 0 ? "刚刚" : "马上";
  } else if (diffInSeconds < HOUR) {
    // 少于 1 小时
    value = Math.floor(diffInSeconds / MINUTE);
    unit = "分钟";
  } else if (diffInSeconds < DAY) {
    // 少于 1 天
    value = Math.floor(diffInSeconds / HOUR);
    unit = "小时";
  } else if (diffInSeconds < MONTH) {
    // 少于 1 个月
    value = Math.floor(diffInSeconds / DAY);
    unit = "天";
  } else if (diffInSeconds < YEAR) {
    // 少于 1 年
    value = Math.floor(diffInSeconds / MONTH);
    unit = "个月";
  } else {
    // 超过 1 年
    value = Math.floor(diffInSeconds / YEAR);
    unit = "年";
  }

  // 根据时间差的毫秒数判断是 "前" 还是 "后"
  const suffix = diffInMs < 0 ? "前" : "后";

  return `${value}${unit}${suffix}`;
}

// 导出工具函数
export * from "./history";
export * from "./theme";
export * from "./useHotKey";
